package com.framework.apollo;

import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.ConfigChangeListener;
import com.ctrip.framework.apollo.ConfigFile;
import com.ctrip.framework.apollo.ConfigService;
import com.ctrip.framework.apollo.core.enums.ConfigFileFormat;
import com.ctrip.framework.apollo.model.ConfigChangeEvent;
import org.apache.commons.lang.StringEscapeUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.logging.LoggerConfiguration;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import java.io.*;

/**
 * 处理格式为xml格式文件的信息
 */
@Service
public class XmlConfiguration {
//    private static final Logger logger = LoggerFactory.getLogger(LoggerConfiguration.class);
//
//    @Value("${apollo.cacheDir}")
//    private String filePath;
//
//    @Value("${apollo.namespace}")
//    private String  namespace;
//
//    @Value("${app.id}")
//    private String appId;
//
//    @Value("${apollo.cluster}")
//    private String cluster;
//
//
//    @PostConstruct
//    private void change(){
//        //遍历namesapce，添加change监听事件，更新xml文件
//        if(namespace==null||"".equals(namespace)) {
//            namespace="application";
//        }
//        String[] namespaces=namespace.split(",");
//        for(int i=0;i<namespaces.length;i++) {
//            String space=namespaces[i];
//            Config config = ConfigService.getConfig(namespaces[i]);
//            config.addChangeListener(new ConfigChangeListener() {
//                @Override
//                public void onChange(ConfigChangeEvent configChangeEvent) {
//                    refreshXmlFiles(space);
//                }
//            });
//        }
//    }
//
//
//    //初始化生成xml配置文件
//    @PostConstruct
//    private void ninitXmlFile() {
//        //遍历namesapce，添加change监听事件，更新xml文件
//        if(namespace==null||"".equals(namespace)) {
//            namespace="application";
//        }
//        String[] namespaces=namespace.split(",");
//        for(int i=0;i<namespaces.length;i++) {
//            refreshXmlFiles(namespaces[i]);
//        }
//    }
//
//    //更新xml文件
//    private void refreshXmlFiles(String namespace) {
//            ConfigFile config = ConfigService.getConfigFile(namespace, ConfigFileFormat.Properties);
//            String xmlContent = config.getContent();
//            if (xmlContent != null && xmlContent.length() > 0)
//                xmlContent = prop2Xml(xmlContent);
//            FileWriter fwriter = null;
//            try {
//                File file = new File(filePath + "/" + appId + "/" + cluster);
//                if (!file.exists()) {
//                    file.mkdirs();
//                }
//                // true表示不覆盖原来的内容，而是加到文件的后面。若要覆盖原来的内容，直接省略这个参数就好
//                fwriter = new FileWriter(filePath + "/" + appId + "/" + cluster + "/" + namespace+ ".xml", false);
//                fwriter.write(xmlContent);
//            } catch (IOException ex) {
//                ex.printStackTrace();
//            } finally {
//                try {
//                    fwriter.flush();
//                    fwriter.close();
//                } catch (IOException ex) {
//                    ex.printStackTrace();
//                }
//            }
//    }
//
//    //处理配置文件内容为xml格式
//    private String prop2Xml(String fileContent) {
//        //去掉content=
//        fileContent=fileContent.substring(8,fileContent.length());
//        //java反转义
//        String outContent = StringEscapeUtils.unescapeJava(fileContent.toString());
//        return outContent;
//    }

}
